package db_operations;

import java.sql.SQLException;

import Beans.Artigiano;
import Beans.TipoArtigiano;

public interface GestioneArtigiani {
	
	//AGGIORNAMENTI
	
	/**
	 * inserisce un artigiano nel DB
	 * @param Artigiano: l'artigiano da inserire
	 * @throws SQLException
	 */
	public void aggiungiArtigiano(Artigiano a) throws SQLException;
	
	
	/**
	 * modifica un artigiano
	 * @param Artigiano a
	 * @throws SQLException
	 */
	public void modificaArtigiano(Artigiano a) throws SQLException;
	
	
	/**
	 * elimina un artigiano dal DB
	 * NOTA BENE: eliminazione logica: spostamento dell'entry nella tabella "deleted"
	 * @param Artigiano a
	 * @throws SQLException
	 */
	public void eliminaArtigiano(Artigiano a) throws SQLException;
	
	
	
	//RICERCA

	/**
	 * restituisce l'artigiano con l'id specificato
	 * @param int id
	 * @throws SQLException
	 */
	public Artigiano getArtigiano(int id) throws SQLException;
	
	
	/**
	 * restituisce la lista di tutti gli artigiani presenti nel DB
	 * @return Artigiani[]
	 * @throws SQLException
	 */
	public Artigiano[] getListaArtigiani() throws SQLException;
	
	
	/**
	 * restituisce un artigiano nella lista deleted, se presente
	 * @param id
	 * @return Artigiano
	 * @throws SQLException
	 */
	public Artigiano getArtigianoDeleted(int id) throws SQLException;
	
	
	/**
	 * restituisce la lista di tutti gli artigiani eliminati
	 * @return Artigiano[]
	 * @throws SQLException
	 */
	public Artigiano[] getListaArtigianiDeleted() throws SQLException;
	
	
	/**
	 * ricerca artigiano su diversi parametri.
	 * NOTA: le locazioni degli array nomiParametri e valoriParametri devono essere 
	 * 		correlate: se nomiParametri[i] contiene "Nazione", 
	 * 					valoriParamentri[i] contiene il nome della nazione.
	 * @param nomiParametri: contiene la lista dei nomi degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Nazione", "Città" ecc..
	 * @param valoriParametri: contiene la lista dei valori degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Italia", "Milano" ecc...
	 * @return Artigiano[]
	 * @throws SQLException
	 */
	public Artigiano[] ricercaArtigiano(String[] nomiParametri, String[] valoriParametri) throws SQLException;
	
	
	/**
	 * ricerca artigiano su diversi parametri. Da utilizzare se i parametri non sono tutti stringhe.
	 * NOTA: le locazioni degli array nomiParametri e valoriParametri devono essere 
	 * 		correlate: se nomiParametri[i] contiene "Nazione", 
	 * 					valoriParamentri[i] contiene il nome della nazione.
	 * @param nomiParametri: contiene la lista dei nomi degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Nazione", "Città" ecc..
	 * @param valoriParametri: contiene la lista dei valori degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Italia", "Milano" ecc...
	 * @param tipiParametri: array contenente nomi di tipo: se tipiParametri[i] è "int"
	 * 			allora nomiParametri[i] sarà di tipo int.
	 * @return Artigiano[]
	 * @throws SQLException
	 */
	public Artigiano[] ricercaArtigiano(String[] nomiParametri, String[] tipiParametri, String[] valoriParametri) throws SQLException;
	
	
	/**
	 * ricerca artigiano su singolo attributo
	 * @param parametro
	 * @param valore
	 * @return Artigiano[]
	 * @throws SQLException
	 */
	public Artigiano[] ricercaArtigiano(String parametro, String valore) throws SQLException;
	
	
	/**
	 * ricerca gli artigiani di un determinato tipo
	 * @param TipoArtigiano t
	 * @return Artigiano[]
	 * @throws SQLException
	 */
	public Artigiano[] ricercaArtigianoPerTipo(TipoArtigiano t) throws SQLException;
	
	
	/**
	 * ricerca gli artigiani per nazione
	 * @param String nazione
	 * @return Artigiano[]
	 * @throws SQLException
	 */
	public Artigiano[] ricercaArtigianoPerNazione(String nazione) throws SQLException;
	
	
	/**
	 * ricerca gli artigiani per regione
	 * @param String regione
	 * @return Artigiani[]
	 * @throws SQLException
	 */
	public Artigiano[] ricercaArtigianoPerRegione(String regione) throws SQLException;
	
	
	/**
	 * ricerca gli artigiani per città
	 * @param String citta
	 * @return Artigiani[]
	 * @throws SQLException
	 */
	public Artigiano[] ricercaArtigianoPerCitta(String citta) throws SQLException;
	
	
	/**
	 * ricerca gli artigiani per città
	 * @param String cap
	 * @return Artigiani[]
	 * @throws SQLException
	 */
	public Artigiano[] ricercaArtigianoPerCAP(String cap) throws SQLException;
	
	
	
	/**
	 * ricerca gli artigiani per provincia
	 * @param String provincia
	 * @return Artigiani[]
	 * @throws SQLException
	 */
	public Artigiano[] ricercaArtigianoPerProvincia(String provincia) throws SQLException;
	
	
	
	

}
